#include <iostream>
#include <vector>
#include <deque>
#include <stack>
using namespace std;

/**
 * Stack: push\pop\top\empty
*/
template <typename T>
class Stack : public vector<T>
{
public:
    Stack()
    {

    }
    void push(T &num)
    {
        push_back(num);
    }

    void pop()
    {
        pop_back();
    }

    T top()
    {
        back();
    }
};


template <typename T, typename Cons = vector<T>>
class StackV2
{
public:
    void push(T &num)
    {
        con.push_back(num);
    }

    void pop()
    {
        con.pop_back(num);
    }

    T top()
    {
        con.back();
    }
private:
    Cons con;
};

int main(int argc, char **argv)
{
    Stack<int> s1;
    StackV2<int> s2;
    StackV2<int, deque<int>> s3;

    stack<int> s1;
    
    return 0;
}